package com.yanfan.energy.mapper;

import com.yanfan.energy.domain.DeviceThingsEnergy;
import com.yanfan.energy.domain.model.ComboBoxBody;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * 设备开关机增量记录表 (DeviceThingsEnergy)表数据库访问层
 *
 * @author makejava
 * @since 2023-08-03 09:27:02
 */
public interface DeviceThingsEnergyMapper {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    DeviceThingsEnergy queryById(Integer id);

    /**
     * 查询指定行数据
     *
     * @param deviceThingsEnergy 查询条件
     * @param pageable           分页对象
     * @return 对象列表
     */
    List<DeviceThingsEnergy> queryAllByLimit(DeviceThingsEnergy deviceThingsEnergy, @Param("pageable") Pageable pageable);

    /**
     * 统计总行数
     *
     * @param deviceThingsEnergy 查询条件
     * @return 总行数
     */
    long count(DeviceThingsEnergy deviceThingsEnergy);

    /**
     * 新增数据
     *
     * @param deviceThingsEnergy 实例对象
     * @return 影响行数
     */
    int insert(DeviceThingsEnergy deviceThingsEnergy);

    /**
     * 批量新增数据（MyBatis原生foreach方法）
     *
     * @param entities List<DeviceThingsEnergy> 实例对象列表
     * @return 影响行数
     */
    int insertBatch(@Param("entities") List<DeviceThingsEnergy> entities);

    /**
     * 批量新增或按主键更新数据（MyBatis原生foreach方法）
     *
     * @param entities List<DeviceThingsEnergy> 实例对象列表
     * @return 影响行数
     * @throws org.springframework.jdbc.BadSqlGrammarException 入参是空List的时候会抛SQL语句错误的异常，请自行校验入参
     */
    int insertOrUpdateBatch(@Param("entities") List<DeviceThingsEnergy> entities);

    /**
     * 修改数据
     *
     * @param deviceThingsEnergy 实例对象
     * @return 影响行数
     */
    int update(DeviceThingsEnergy deviceThingsEnergy);

    /**
     * 修改数据根据设备编号、区域id、能源类型
     *
     * @param deviceThingsEnergy
     * @return int
     * @author caijinkang
     * @date 2023/8/20 23:30
     */
    int updateByType(DeviceThingsEnergy deviceThingsEnergy);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Integer id);

    /**
     * 根据type和id删除绑定记录
     *
     * @param workshopId 车间id
     * @param type       类型
     * @param deviceId   设备id
     * @param thingsId   模型id
     * @return int
     * @author caijinkang
     * @date 2023/8/8 10:01
     */
    int deleteByTypeAndId(@Param("workshopId") Integer workshopId, @Param("type") Integer type, @Param("id") Integer deviceId, @Param("thingsId") Integer thingsId);

    /**
     * 查询设备参数绑定能源类型数据
     *
     * @param type
     * @param id         车间id
     * @param deviceName 设备名称
     * @return java.util.List<com.yanfan.zhongji.domain.DeviceThingsEnergy>
     * @author caijinkang
     * @date 2023/8/4 13:31
     */
    List<DeviceThingsEnergy> findDeviceThingsEnergyByCompany(@Param("type") Integer type, @Param("id") Integer id, @Param("deviceName") String deviceName);

    /**
     * 根据能源类型、设备id、参数物模型查询
     *
     * @param workshopId
     * @param type
     * @param deviceId
     * @param thingsId
     * @return java.util.List<com.yanfan.zhongji.domain.DeviceThingsEnergy>
     * @author caijinkang
     * @date 2023/8/11 10:30
     */
    List<DeviceThingsEnergy> findDeviceThingsEnergyById(@Param("workshopId") Integer workshopId, @Param("type") Integer type, @Param("deviceId") Integer deviceId, @Param("thingsId") Integer thingsId);

    /**
     * 查询物模型下拉孔根据设备id
     *
     * @param deviceId
     * @return java.util.List<com.yanfan.energy.domain.model.ComboBoxBody>
     * @author caijinkang
     * @date 2023/8/15 9:30
     */
    List<ComboBoxBody> findThingsModelByDeviceId(@Param("deviceId") Integer deviceId);

    /**
     * 设备id查询设备编号
     *
     * @param deviceId 设备id
     * @return java.lang.String
     * @author caijinkang
     * @date 2023/8/15 17:07
     */
    String findDeviceNumber(@Param("deviceId") Integer deviceId);

    /**
     * 根据设备id查询设备所绑定的车间id
     *
     * @param deviceId
     * @return java.lang.Integer
     * @author caijinkang
     * @date 2023/8/15 17:18
     */
    Integer findTrueByDeviceId(@Param("deviceId") Integer deviceId);

    /**
     * 根据设备id查询设备的绑定区域的名称
     *
     * @param deviceId
     * @return java.lang.String
     * @author caijinkang
     * @date 2023/8/15 17:29
     */
    String findDeviceIdWorkshopName(@Param("deviceId") Integer deviceId);

    /**
     * 查询设备所有在的区域是否有绑定
     *
     * @param deviceId
     * @param workshopId
     * @return java.lang.Integer
     * @author caijinkang
     * @date 2023/8/20 22:21
     */
    Integer findDeviceCount(@Param("deviceId") Integer deviceId, @Param("workshopId") Integer workshopId);

    /**
     * 查询设备所在的区域及能源类型是否存在
     *
     * @param deviceId
     * @param workshopId
     * @param energyType
     * @return java.lang.Integer
     * @author caijinkang
     * @date 2023/8/20 23:22
     */
    Integer findDeviceCountAndEnergy(@Param("deviceId") Integer deviceId, @Param("workshopId") Integer workshopId, @Param("energyType") Integer energyType);

    /**
     * 查询设备所在的区域及能源类型及设备物模型的参数是否存在
     *
     * @param deviceId
     * @param workshopId
     * @param energyType
     * @param thingsId
     * @return java.lang.Integer
     * @author caijinkang
     * @date 2023/8/22 10:37
     */
    Integer findDeviceCountAndThings(@Param("deviceId") Integer deviceId, @Param("workshopId") Integer workshopId, @Param("energyType") Integer energyType, @Param("thingsId") Integer thingsId);

    Integer updateDeviceWorkshopId(@Param("deviceId") Integer deviceId, @Param("workshopId") Integer workshopId, @Param("energyType") Long energyType);
}

